#ifndef __MYTLV__
#define __MYTLV__

typedef enum
{   
    // 保留字段，需要功能时另加
    HASH = 1,// 盐值, 哈希
    OVER = 2,// 文件传输完成
    IS_OK = 4,// 表示前一个指令执行结果
    LOGIN = 8,// 表示登录指令
    // 命令类型
    CD = 16,// 进入对应目录
    LS = 32,// 列出相应目录文件
    PWD = 64,// 显示目前所在路径
    MKDIR = 128,// 创建目录文件
    RMDIR = 256,// 删除目录文件
    PUTS = 512,// 将本地文件上传至服务器
    GETS = 1024,// 下载服务器文件到本地
    REMOVE = 2048// 删除服务器上的文件
}cmdstat_t;


typedef struct client_s
{
    char Name[1024];// 用户名
    char Password[1024];// 用户密码
}client_t;

typedef struct train_s
{

    cmdstat_t cmdstat;// 存放命令和状态
    int length;// 火车头，存放传输数据的长度
    char data[4096];// 存放每次传输的数据
}train_t;

/*
    接收整个文件,  与transfer_file_by_send配合使用
    @param
    netfd: 套接字描述符
*/
int recv_file(int netfd);


/*
    接收整个文件，配合transfer_file_by_sendfile使用，适合大文件传输
    @param
    netfd: 套接字描述符
*/
int recv_from_sendfile(int netfd);


/*
    函数功能：send发送文件
    @param
    netfd: 与客户端连接的套接字描述符
    filename: 要发送的文件名称
*/
int transfer_file_by_send(int netfd, const char* filename);


/*
    函数功能：mmap发送文件
    @param
    netfd: 与客户端连接的套接字描述符
    filename: 要发送的文件名称
*/
int transfer_file_by_mmap(int netfd, const char* filename);

/*
    函数功能：sendfile发送文件
    @param
    netfd: 与客户端连接的套接字描述符
    filename: 要发送的文件名称
*/
int transfer_file_by_sendfile(int netfd, const char* filename);

#endif // !__NETDISK_H__
